home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-20 / pmpsrc11.zip / CAPTURE.C < prev    next >
Text File  |  1991-07-30  |  3KB  |  117 lines

  1. /*
  2.     pmp.c -- File capture/download
  3.  
  4.   Poor Man's Packet (PMP)
  5.   Copyright (c) 1991 by Andrew C. Payne    All Rights Reserved.
  6.  
  7.   Permission to use, copy, modify, and distribute this software and its
  8.   documentation without fee for NON-COMMERCIAL AMATEUR RADIO USE ONLY is hereby
  9.   granted, provided that the above copyright notice appear in all copies.
  10.   The author makes no representations about the suitability of this software
  11.   for any purpose.  It is provided "as is" without express or implied warranty.
  12.  
  13.     July, 1989
  14.     Andrew C. Payne
  15. */
  16.  
  17. /* ----- Includes ----- */
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <alloc.h>
  21. #include <mem.h>
  22. #include <string.h>
  23.  
  24. #include "pmp.h"
  25.  
  26. /* ----- Local Variables ----- */
  27.  
  28. static long    buffree;        /* bytes free in capture buffer */
  29. static char    *capbuffer;        /* start of capture buffer */
  30. static char    *cap;            /* capture pointer */
  31. static FILE    *capfile;        /* capture file */
  32.  
  33. /* ----- Subroutines ----- */
  34.  
  35. /* InitCapture()
  36.     Initalize the capture system.
  37. */
  38. void InitCapture()
  39. {
  40.     capbuffer = cap = malloc(CaptureBuffer);
  41.     if(cap == NULL)
  42.         OutOfMemory();
  43.  
  44.     buffree = CaptureBuffer;
  45.     capfile = NULL;
  46.     *CaptureFile = '\0';
  47. }
  48.  
  49. /* FlushCapture()
  50.     Flushes the contents of the capture buffer to the capture file.
  51. */
  52. void FlushCapture()
  53. {
  54.     if(CaptureBuffer != buffree) {    /* bytes in buffer */
  55.         fwrite(capbuffer, CaptureBuffer - buffree, 1, capfile);
  56.         cap = capbuffer;
  57.         buffree = CaptureBuffer;
  58.     }
  59. }
  60.  
  61. /* Capture(s,len)
  62.     Given a string and a length, store it in the capture buffer.
  63. */
  64. void Capture(char *s, int len)
  65. {
  66.     if(capfile == NULL)
  67.         return;
  68.  
  69.     if(len > buffree)        /* flush if it won't fit */
  70.         FlushCapture();
  71.  
  72.     CaptureSize += len;
  73.     buffree -= len;            /* add to buffer */
  74.     memcpy(cap, s, len);
  75.     cap += len;
  76. }
  77.  
  78. /* OpenCapture(fname)
  79.     Given a filename, opens the file as the current capture file.
  80. */
  81. void OpenCapture(char *fname)
  82. {
  83.     if(capfile != NULL)        /* close existing file */
  84.         CloseCapture();
  85.  
  86.     strcpy(CaptureFile,fname);    /* save name */
  87.     capfile = fopen(fname,"w");
  88.     if(capfile == NULL) {
  89.         uprintf(InvAttr,"  Can't open '%s' ",fname);
  90.         return;
  91.     }
  92.     cap = capbuffer;
  93.     buffree = CaptureBuffer;
  94.     CaptureSize = 0;
  95. }
  96.  
  97. /* CloseCapture()
  98.     Closes the current capture file.
  99. */
  100. void CloseCapture(void)
  101. {
  102.     if(capfile != NULL) {
  103.         FlushCapture();
  104.         fclose(capfile);
  105.     }
  106.     capfile = NULL;
  107.     *CaptureFile = '\0';
  108. }
  109.  
  110. /* Capturing()
  111.     Returns TRUE if currently capturing to a file.
  112. */
  113. int Capturing(void)
  114. {
  115.     return capfile != NULL;
  116. }
  117.